﻿#define _CRT_SECURE_NO_WARNINGS	

//#include<stdio.h>
//
////枚举类型
//enum Color
//{
//	RED = 2,
//	GREEN,
//	BLUE
//};
//
//int main()
//{
//	printf("%d\n", RED);
//	printf("%d\n", GREEN);
//	printf("%d\n", BLUE);
//
//	return 0;
//}


//利用枚举类型写一个计算器

#include<stdio.h>

enum Option
{
	EXIT,
	ADD,
	SUB,
	MUL,
	DIV
};

void  menu()
{
	printf("******************************\n");
	printf("*******     Function    ******\n");
	printf("******************************\n");
	printf("****** 1.Add      2.Sub ******\n");
	printf("****** 3.Mul      4.Div ******\n");
	printf("****** 0.exit           *****\n");
	printf("******************************\n");

}

int Add(int x, int y)
{
	return x + y;
}
int Sub(int x, int y)
{
	return x - y;
}
int Mul(int x, int y)
{
	return x * y;
}
int Div(int x, int y)
{
	return x / y;
}

//不用枚举类型时的样子
//int main()
//{
//	menu();
//	int input = 0;
//	int x, y;
//	scanf("%d",&input);
//
//	do
//	{
//		switch(input)
//		{
//		case 1:
//			printf("请输入两个数字：");
//			scanf("%d %d", &x, &y);
//			printf("结果：%d\n", Add(x, y));
//			break;
//		case 2:
//			printf("请输入两个数字：");
//			scanf("%d %d", &x, &y);
//			printf("结果：%d\n", Sub(x, y));
//			break;
//		case 3:
//			printf("请输入两个数字：");
//			scanf("%d %d", &x, &y);
//			printf("结果：%d\n",Mul(x, y));
//			break;
//		case 4:
//			printf("请输入两个数字：");
//			scanf("%d %d", &x, &y);
//			printf("结果：%d\n", Div(x, y));
//			break;
//		default:
//			printf("输入错误，，请重新输入:");
//			break;
//		}
//
//	} while (input);
//
//	printf("程序已安全退出\n");
//
//	return 0;
//}

//使用枚举类型时的样子
//int main()
//{
//	int input = 0;
//	int x, y;
//
//	do
//	{
//		menu();
//		scanf("%d", &input);
//		switch (input)
//		{
//		case ADD:
//			printf("请输入两个数字：");
//			scanf("%d %d", &x, &y);
//			printf("结果：%d\n", Add(x, y));
//			break;
//		case SUB:
//			printf("请输入两个数字：");
//			scanf("%d %d", &x, &y);
//			printf("结果：%d\n", Sub(x, y));
//			break;
//		case MUL:
//			printf("请输入两个数字：");
//			scanf("%d %d", &x, &y);
//			printf("结果：%d\n", Mul(x, y));
//			break;
//		case DIV:
//			printf("请输入两个数字：");
//			scanf("%d %d", &x, &y);
//			printf("结果：%d\n", Div(x, y));
//			break;
//		case EXIT:
//			break;
//		default:
//			printf("输入错误，请重新输入:");
//			break;
//		}
//
//	} while (input);
//
//	printf("程序已安全退出\n");
//
//	return 0;
//}


//#include<stdio.h>
////声明了一个联合体
//union Un
//{
//	char c;
//	int i;
//};
//
//int main()
//{
//	//联合变量的定义
//	union Un un = { 0 };
//	//计算一个联合变量的大小
//	printf("%zd\n", sizeof(un));
//	return 0;
//}

#include<stdio.h>

//union Un1
//{				//成员大小		VS默认对齐数		对齐数
//	char c[5];	//	1				 8				  1
//	int i;		//  4				 8				  4
//};
//
//union Un2
//{				//成员大小		VS默认对齐数		对齐数
//	short c[7]; //	2				 8				  2
//	int i;      //  4				 8				  4
//};
//
//int main()
//{
//	printf("%zd\n", sizeof(union Un1));//最大对齐数为4，又因为最大成员的所占空间大小为5，所以要对齐到8
//	printf("%zd\n", sizeof(union Un2));//最大对齐数为4，又因为最大成员的所占空间大小为14，所以要对齐到16
//	return 0;
//}



//union Un
//{
//	char c;
//	int i;
//};
//
//int main()
//{
//	union Un un = { 0 };
//
//	printf("%p\n", &un);
//	printf("%p\n", &un.c);
//	printf("%p\n", &un.i);
//
//	return 0;
//}



//union Un
//{
//	char c;
//	int i;
//};
//
//int main()
//{
//	union Un un = { 0 };
//
//	un.i = 0x11223344;
//	un.c = 0x55;
//	
//	return 0;
//}


//使用联合体来做一个礼物清单
/*
⽐如，我们要搞⼀个活动，要上线⼀个礼品兑换单，礼品兑换单中有三种商品：图书、杯⼦、衬衫。
每⼀种商品都有：库存量、价格、商品类型和商品类型相关的其他信息。
图书：书名、作者、⻚数
杯⼦：设计
衬衫：设计、可选颜⾊、可选尺⼨
*/

//单独使用结构体来存储所有商品的属性，要用的时候创建相应的变量来进行赋值即可
//struct giftlist
//{
//	//基本信息
//	int stare;
//	float price;
//	int gifttype;
//	char giftinf[100];
//
//	//特别信息
//	char book_name[20];
//	char book_author[20];
//	int book_page;
//	char design[100];
//	int color;
//	float size;
//};

//但是不妨仔细看一下，这些商品既有公共的属性又有私有的属性。而这些私有的属性不可能在同一时间内出现多次。
//为此，我们可以想到联合体的特点

//struct giftList
//{
//	//基本信息
//	int stare;
//	float price;
//	int gifttype;
//	char giftinf[100];
//
//	//私有属性用联合体内嵌套结构体来表示
//	union 
//	{
//		struct 
//		{
//			char book_name[20];
//			char book_author[20];
//			int book_page;
//		}book;
//
//		struct 
//		{
//			char design[100];
//		}cup;
//
//		struct 
//		{
//			char design[100];
//			int color;
//			float size;
//		}shirt;
//	}un_gift;
//};
//
//int main()
//{
//	//struct book Book = { "变形金刚","123",52000 };
//	//un_gift.book_name;
//
//	struct giftList Book = { 100,10.0,1,"冒险类小说",{ "变形金刚" ,"123" ,52000 } };
//
//
//}


//int main()
//{
//	int a = 0;
//	int b = 0;
//	int c = 0;
//
//	printf("&a = %p &b = %p &c = %p\n",&a,&b,&c);
//
//	return 0;
//}